/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.resume.contrat.services.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.resume.contrat.om.IResumeContrat;
import fr.generali.refservcommuns.rce.liste.contrats.consultationcontratpersonneservice.DossierContrat;
import fr.generali.refservcommuns.rce.liste.contrats.consultationcontratpersonneservice.ListeDossierContrat;
import fr.generali.refservcommuns.clients.resume.dto.v4.ctr.structurecontrat.DTOContrat;

/**
 * Classe de mapper utilisée par {@link ResumeContratService}
 * 
 * @author Guillaume Lancelin
 */
@Component
public class ResumeContratServiceMapper {

    /**
     * L'assembler
     */
    @Autowired
    @Qualifier("dtoContrat2ResumeContratConverter")
    private Converter<DTOContrat, IResumeContrat> dtoContrat2ResumeContratConverter;

    /**
     * Transforme un {@link ListeDossierContrat} en une liste de
     * {@link IResumeContrat}.
     * 
     * @param listeDossier la réponse du service S14
     * @return une liste de {@link IResumeContrat}
     */
    public List<IResumeContrat> mapperConsultationListeContratParIdClient(ListeDossierContrat listeDossier) {
        List<IResumeContrat> resultat = null;
        List<DossierContrat> listeDossierContrat = listeDossier.getDossierContrat();

        if (listeDossier != null && CollectionUtils.isNotEmpty(listeDossierContrat)) {
            resultat = new ArrayList<IResumeContrat>();
            for (int i = 0; i < listeDossierContrat.size(); i++) {
                DossierContrat dossier = listeDossierContrat.get(i);
                List<DTOContrat> listeContrats = dossier.getContrat();
                if (listeContrats != null) {
                    for (int j = 0; j < listeContrats.size(); j++) {
                        IResumeContrat resume = dtoContrat2ResumeContratConverter.convert(listeContrats.get(j));
                        if (resume != null) {
                            resume.setNumeroClient(dossier != null && dossier.getRolePersonne() != null ? dossier
                                            .getRolePersonne().getIdentifiantPersonne() : null);
                            resultat.add(resume);
                        }
                    }
                }
            }
        }

        return resultat;
    }
}
